package mavenFy.fyDownLoader;

import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Hello world!
 *
 */
public class DownLoader{
    private int threadNum = 16;
    
    private int maxThreadNum = 100;
    
    private boolean isStart = false;
    
    private List<Thread> listThread = new ArrayList(threadNum);
    
    /**
     * 这里的参数是TaskBean而不是URL和file的原因是，任务的执行时间远大于
     * 任务生成的时间。为了减轻任务执行器的压力，所以任务的生成交由调用者来做；
     */
    public void addTask(TaskBean task) {
        if( DownLoadTask.queueTask.size()<=1000){
            DownLoadTask.queueTask.offer(task);
            System.out.println("任务添加成功");
        }else{
            try {
                TimeUnit.SECONDS.sleep(5);
            } catch (InterruptedException ex) {
                Logger.getLogger(DownLoader.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        if(!isStart){
            startTask();
        }
    }
    
    /**
     * 开启任务
     */
    private void startTask() {
        if(isStart){
            return ;
        }
        for(int index = 0;index<threadNum;index++) {
            DownLoadTask task = new DownLoadTask();
            Thread t = new Thread(task);
            t.setName("DownLoadTaskThread--"+index);
            t.start();
            listThread.add(t);
        }
        isStart = true;
    }
    
    public int getMaxThreadNum() {
        return maxThreadNum;
    }
    public void setMaxThreadNum(int maxThreadNum) {
        this.maxThreadNum = maxThreadNum;
    }
}
